#include <Arduino.h>
#include <U8g2lib.h>

#include <WiFi.h>
#include <WiFiAP.h>
#include <WiFiClient.h>
#include <WiFiGeneric.h>
#include <WiFiMulti.h>
#include <WiFiScan.h>
#include <WiFiServer.h>
#include <WiFiSTA.h>
#include <WiFiType.h>
#include <WiFiUdp.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif



//wifi info
char* ssid     = "iron2222";
char* password = "18436099009"; 


//OLED引脚设置
U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 36, /* data=*/ 35, /* cs=*/ 37, /* dc=*/ 33, /* reset=*/ 34);

//按键
int button1Pin = 1;    
int button2Pin = 2;    
int button3Pin = 3;     
int button4Pin = 6;  







void setup() {
  Serial.begin(115200);
  u8g2.begin();
  
  dispwelcome();    //显示欢迎画面

  WiFi.begin(ssid, password);
  Serial.print("Connecting to ");              // 串口监视器输出网络连接信息
  Serial.print(ssid); Serial.println(" ...");  // 告知用户正在尝试WiFi连接
  int i = 0;                                   // 这一段程序语句用于检查WiFi是否连接成功
  while (WiFi.status() != WL_CONNECTED) {      // WiFi.status()函数的返回值是由NodeMCU的WiFi连接状态所决定的。 
    delay(1000);                               // 如果WiFi连接成功则返回值为WL_CONNECTED                       
    Serial.print(i++); Serial.print(' ');      // 此处通过While循环让NodeMCU每隔一秒钟检查一次WiFi.status()函数返回值
  }                                            // 同时NodeMCU将通过串口监视器输出连接时长读秒。
                                               // 这个读秒是通过变量i每隔一秒自加1来实现的。                                           
  Serial.println("");                          // WiFi连接成功后
  Serial.println("Connection established!");   // NodeMCU将通过串口监视器输出"连接成功"信息。
  Serial.print("IP address:    ");             // 同时还将输出NodeMCU的IP地址。这一功能是通过调用
  Serial.println(WiFi.localIP());              // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。
  
  ipaddress = WiFi.localIP().toString();

  pinMode(button1Pin, INPUT_PULLUP); //输入模式
  pinMode(button2Pin, INPUT_PULLUP);
  pinMode(button3Pin, INPUT_PULLUP);
  pinMode(button4Pin, INPUT_PULLUP);
  
}

void loop() {
  //进行循环监听
  uint16_t num = 0;
  if (digitalRead(button1Pin) == LOW)
  {
    button1();
    }
  
}

void dispwelcome() {
  u8g2.firstPage();
  u8g2.clearBuffer();         //清除内部缓冲区
  u8g2.setFontDirection(0);   //设置字体方向
  u8g2.setFont(u8g2_font_ncenB14_tr);     //设置字体
  u8g2.setCursor(0, 40);
  u8g2.print("Hello Jarvis!");
  u8g2.sendBuffer();
  delay(1000);
}
void button1() {
  
  u8g2.firstPage();
  u8g2.clearBuffer();         //清除内部缓冲区
  u8g2.setFontDirection(0);   //设置字体方向
  u8g2.setFont(u8g2_font_ncenB14_tr);     //设置字体
  u8g2.setCursor(0, 40);
  u8g2.print(ipaddress);
  u8g2.sendBuffer();
  delay(1000);
}


/*
void dispOled() {
  struct tm timeinfo;
  char str[64] = {0};
  if(!getLocalTime(&timeinfo)) {
    Serial.println("Failed to obtain time");
    return;
  }
  if(oldsec == timeinfo.tm_sec)
    return;
  oldsec = timeinfo.tm_sec;

  if(modelsign == 0) {
    u8g2.clearBuffer();
    u8g2.setFontDirection(0);
    u8g2.setFont(u8g2_font_ncenB14_tr);
    u8g2.setCursor(20, 15);
    u8g2.print(&timeinfo, "%H:%M:%S");
    u8g2.setCursor(15, 35);
    u8g2.print(&timeinfo, "%Y/%m/%d");
    u8g2.setCursor(2,55);
    u8g2.print(ipaddress.c_str());
  }
  else if(modelsign == 1) {
    u8g2.clearBuffer();
    u8g2.setFont(u8g2_font_ncenB12_tr);
    u8g2.setCursor(30, 20);
    sprintf(str, "FM:%d/%d", stations + 1, countStation());
    u8g2.print(str);
    u8g2.setCursor(25, 40);
    sprintf(str, "Vol:%02d/%d", volume, 15);
    u8g2.print(str);
    u8g2.setCursor(20,60);
    
    sprintf(str, "Freq: %d MHz", fmstation[stations]);
    u8g2.print(str);
  }
  else if(modelsign == 2) {
    u8g2.clearBuffer();
    u8g2.setFont(u8g2_font_ncenB14_tf);
    if (connstat == false) {
      u8g2.setCursor(20, 20);
      u8g2.print("NetRadio");
      u8g2.setCursor(2, 40);
      u8g2.setFont(u8g2_font_ncenB10_tf);
      u8g2.print("Connection failed.");
    } else {
      u8g2.setCursor(20, 20);
      u8g2.print("NetRadio");
      u8g2.setCursor(2, 40);
      u8g2.setFont(u8g2_font_ncenB10_tf);
      sprintf(str, "%s:%d", WEBSERVERIP, WEBSERVERPORT);
      u8g2.print(str);
    }
  }
  u8g2.sendBuffer();
}
*/
